// 构造器函数的使用
const constructorFunc = function (name) {
  this.name = name;
  this.talk = () => {
    console.log("constructorFunc.this :: ", this);
    console.log("i'm", this.name, ".");
  };
  this.run = (millier) => {
    console.log("constructorFunc.this :: ", this);
    console.log("i'm", this.name, ".");
    console.log("i'm runed", millier, "M.");
  };
};

const obj = { name: "Jhon" };

const co_Bob = new constructorFunc("Bob");

// co_Bob.talk();
// co_Bob.talk.apply(obj);
// co_Bob.run.apply(obj, [1776]);
co_Bob.run.call(obj, 1776);
// co_Bob.talk();

// -----------
// 普通对象的使用测试
// const user_obj = {
//   name: "Bob",
//   talk: function () {
//     console.log("user_obj.this ::", this);
//     console.log("i'm", this.name);
//   },
// };

// const jhon = { name: "Jhon" };

// user_obj.talk();
// user_obj.talk.apply(jhon);
// user_obj.talk.call(jhon);

// ------------------
// ES6 class 类的一些测试
// class User {
//   constructor(name, age) {
//     this.name = name;
//     this.age = age;
//   }

//   talk() {
//     console.log("i'm", this.name, ",", this.age, "year's old.");
//   }
// }

// const bob_user = new User("Bob", 18);
// const jhon_user = new User("Jhon", 22);

// jhon_user.talk.apply(bob_user);
// jhon_user.talk.call(bob_user);

// 普通函数使用
// function func() {
//   console.log("func.this ::", this);
//   console.log("func ::", this.name);
// }

// let user = { name: "张三" };

// func();
// func.apply({ name: "Zero" });
// func.call({ name: "Zero" });
// func.call({});

// const newFunc = func.bind({ name: "Nathes" });
// newFunc();

// func.call(user);

// 箭头函数相关的测试
// const pointFunc = () => {
//   console.log("pointFunc.this ::", this);
//   console.log("pointFunc ::", this.name);
// };

// pointFunc();
// pointFunc.apply({ name: "Bob" });
